perm filename DCSTAT.MAC[NET,MRC]6 blob
sn#302801 filedate 1977-08-28 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00014 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE DCSTAT Datacomputer status
C00003 00003 ***DEFINITIONS***
C00004 00004 MACRO DEFINITIONS
C00007 00005 SYSTEM DEPENDENT DEFINITIONS
C00009 00006 (((TOPS-10 OR SAIL)))
C00010 00007 (((TENEX)))
C00011 00008 ***PROGRAM***
C00012 00009 ***DATACOMPUTER INTERFACE ROUTINES***
C00015 00010 ***SYSTEM DEPENDENT ROUTINES***
C00017 00011 (((TOPS-10 OR SAIL)))
C00022 00012 ((((SAIL)))
C00031 00013 (((TENEX)))
C00036 00014 ***DATA***
C00039 ENDMK
C⊗;
TITLE DCSTAT Datacomputer status
; Bugs/gripes to Bug-DFTP@MIT-AI
IF1,<
IFNDEF F.TENX,<F.TENX==0> ; NON-ZERO IF FOR TENEX OR TWENEX
IFNDEF F.ITS,<F.ITS==0> ; NON-ZERO IF FOR ITS
IFNDEF F.TP10,<F.TP10==0> ; NON-ZERO IF FOR TOPS-10
IFNDEF F.SAIL,<F.SAIL==0> ; NON-ZERO IF FOR SAIL
IFN F.TENX,<F.TENX==1
PRINTX Assembling TENEX version>
IFN F.ITS,<F.ITS==1
PRINTX Assembling ITS version>
IFN F.TP10,<F.TP10==1
PRINTX Assembling TOPS-10 version>
IFN F.SAIL,<F.SAIL==1
PRINTX Assembling SAIL versIon>
IFN <F.TENX+F.ITS+F.TP10+F.SAIL>-1,<
PRINTX ? Your site specifications lose
PASS2
END>
>
; ***DEFINITIONS***
DCHOST==37
DCSOKT==703
; REGISTER DEFINITIONS
R1==1
R2==2
R3==3
R4==4
R5==5
R6==6
R7==7
R10==10
R11==11
R12≥=12
R13==13
R14≥=14
R15==15
R16==16
R17==17
; (SCRATCH REGISTERS)
REG1==1
REG2==2
REG3==3
REG4==4
; (COMMONLY USED REGISTERS)
IOREG==R5
BPREG==R6
FLAG==R15
UTIL==R16
STAK==R17
; MACRO DEFINITIONS
SALL
DEFINE BEGINR(SAVLST,%RETN)
< ..SAVL==0
..SAVC==0
IFIDN <SAVLST><ALL>,<..SAVL==77777>
IFDIF <SAVLST><ALL>,<
IRP SAVLST,<
IFG <SAVLST>-20,<!!
PRINTX SAVLST NOT A REGISTER>
IFLE <SAVLST>-20,<
IFN ..SAVL&1←SAVLST,<!!
PRINTX SAVLST SAVED TWICE>
..SAVL==..SAVL!1←SAVLST
..SAVC==..SAVC+1>>>
IFN ..SAVL,<
..REG==17
REPEAT 20,<
IFN ..SAVL&1←..REG,<PUSH STAK,..REG>
..REG==..REG-1>>
DEFINE .%RETN <%RETN> ; UNIQUE LOCATION FOR RETURN AND ENDR
DEFINE .%RETL <%RETN':!>
..SFLG==0 ; LARGEST SKIP RETURN
>
; IF RETURN CAN'T BE POPJ, THEN IT ASSEMBLES AS JRST TO ENDR CODE
; JRST TO .%RETN FOR NOSKIP RETURN, .%RETN-N FOR SKIP RETURN
; ..SFLG SIGNALS THAT SKIP CODE MUST BE ASSEMBLED IN ENDR
DEFINE RETURN(SK,N)
<<IFB <SK>,<<IFE ..SAVC,<POPJ STAK,.%RETN>>+<IFN ..SAVC,<JRST .%RETN>>>>+<IFIDN <SK><SKIP>,<<IFG N-..SFLG,<..SFLG==N>>*0+<JRST .%RETN-N>>>>
; RETURN FOR USE WITH CONDITIONAL JUMPS
DEFINE RETN(N)
<<IFB <N>,<<IFE ..SAVC,<.%RETN>>+<IFN ..SAVC,<.%RETN>>>>+<IFNB <N>,<<IFG N-..SFLG,<..SFLG==N>>*0+<.%RETN-N>>>>
; ENDR DECRIMENTS STAK, RESTORES REGS, RETURNS (POSSIBLY SKIPPING)
DEFINE ENDR(SK,N)
< IFB <SK>,<..N==0>
IFIDN <SK><SKIP>,<..N==N
IFG <..N-..SFLG>,<..SFLG==..N>>
IFN <..SFLG>,<IFN <..N-..SFLG>,<JRST .%RETN-..N>
REPEAT ..SFLG,<
AOS -..SAVC(STAK)>>
.%RETL
..REG==0
REPEAT 20,<
IFN ..SAVL&1←..REG,<POP STAK,..REG
..SAVL==..SAVL-1←..REG>
..REG==..REG+1>
POPJ STAK,>
DEFINE CALLR(ROUTIN)
< PUSHJ STAK,ROUTIN>
; SYSTEM DEPENDENT DEFINITIONS
; (((ITS)))
IFN F.ITS,<
SEARCH SITS
LOC 150
; INITIALIZATION ROUTINE; MUST DO INIT$G AFTER LOADING TO FLUSH THE
; COMPATABILITY PACKAGE COMPLETELY(AFTER PREVIOUSLY DOING A D SYSTEM
; COMMAND TO DECUUO).
INIT: MOVSI (JUMPA)
HRR .JBSA## ; GET DEC START ADDRESS
.BREAK 12,[400001,,]
SETZ 1,
MOVE [1,,2]
BLT .
.BREAK 16,100000 ; RETURN TO DDT
; I/O CHANNELS
TTO==1
ICP==2
DCI==3
; ITS NETWORK CODES
%NSRFS==4
%NSOPN==5
%NSCLI==10
%NSINP==11
DEFINE TBOUT(REG)
< .IOT TTO,REG>
DEFINE TSOUT(STRING)
<IRP STRING
< MOVEI REG1,STRING
CALLR $STRIN
>>
$STRIN: BEGINR
HRLI REG1,(POINT 7,)
$STRI1: ILDB REG1
JUMPE RETN(0)
.IOT TTO,
JRST $STRI1
ENDR
DEFINE DCBIN(REG)
< .IOT DCI,REG
SKIPE FLAGDD
.IOT TTO,REG
>
>
; (((↑↑↑)))
; (((TOPS-10 OR SAIL)))
IFN F.TP10!F.SAIL,<
IFN F.SAIL,<IFNDEF TTCALL,<OPDEF TTCALL [TTYUUO]>>
SIZBLK==200
DCCHAN==1
; DEFINITIONS FROM "IMP.MAC"
.IBDEV==0
.IBSTT==1
.IBERR==1
.IBLCL==2
.IBHST==3
.IBRMT==4
.IUSTT==0
.IUCON==3
.IUCLS==4
.IULSN==5
.IULHS==15
.IESOF==5
.IESKT==11
.IEDWN==13
.IETIM==15
DEFINE TBOUT(REG)
< TTCALL 1,REG>
DEFINE TSOUT(STRING)
< IRP STRING
< TTCALL 3,STRING>>
DEFINE DCBIN(REG)
< SKIPG DCIBUF+2
CALLR NUTMI
SOS DCIBUF+2
ILDB REG,DCIBUF+1
JUMPE REG,.-4>
>
; (((↑↑↑)))
; (((TENEX)))
IFN F.TENX,<
SEARCH STENEX
DEFINE TBOUT(REG)
< IFN <REG1-REG>,< HRRZI REG1,(REG)>
PBOUT>
DEFINE TSOUT(STRING)
< IRP STRING
< HRROI REG1,STRING
PSOUT>>
DEFINE DCBIN(REG)
< MOVE REG1,DCIJFN
BIN
SKIPN FLAGDD
JRST .+3
HRRZI REG1,(REG2)
PBOUT
HRRZI REG,(REG2)>
>
; (((↑↑↑)))
; ***PROGRAM***
DCSTAT:
IFN F.TP10!F.SAIL,<JFCL>
IFE F.ITS,<RESET>
MOVE STAK,[IOWD STSIZ,STBEG]
CALLR S$INIT
SKIPE FLAGDD
JRST QUIT
HEADER: CALLR RENPRE
CALLR RENLIN
CAMN IOREG,[ASCII/.J900/]
JRST QUITQ
CAME IOREG,[ASCII/.I280/]
JRST HEADER
JRST TRAILR
STATUS: DCBIN <IOREG>
TBOUT <IOREG>
CAIE IOREG,12
JRST STATUS
TRAILR: DCBIN <IOREG>
CAIE IOREG," "
JRST FINISH
MOVEI IOREG,"]"
TBOUT <IOREG>
MOVEI IOREG," "
TBOUT <IOREG>
JRST STATUS
FINISH: CALLR RENLIN
JRST QUIT
; ***DATACOMPUTER INTERFACE ROUTINES***
; RENLIN -- REQUEST END: PROCEED TO NEW LINE
;
RENLIN: BEGINR <IOREG>
RENLNL: DCBIN <IOREG>
CAIE IOREG,12
JRST RENLNL
ENDR
; RENLIP -- REQUEST END: PROCEED TO NEW LINE, PRINT MESSAGE
;
RENLIP: BEGINR <IOREG>
SKIPN FLAGDD
JRST RENLPF
RENLPL: DCBIN <IOREG>
CAIE IOREG,12
JRST RENLPL
RETURN
RENLPF: DCBIN <IOREG>
CAIN IOREG,12
RETURN
CAIE IOREG,11
JRST RENLPF
MOVEI IOREG," "
TBOUT <IOREG>
MOVEI IOREG,"("
RENLPP: TBOUT <IOREG>
DCBIN <IOREG>
CAIE IOREG,15
JRST RENLPP
DCBIN <IOREG>
MOVEI IOREG,")"
TBOUT <IOREG>
TSOUT <CRLF>
ENDR
; RENPRE -- REQUEST END: RETURN ERROR PREFIX (ASSUMES RENLIN)
; OUT: IOREG -- ASCII PREFIX (5 BYTES)
;
RENPRE: BEGINR <BPREG,UTIL,FLAG>
RENPRP: SETZ IOREG,
MOVE BPREG,[440700,,IOREG]
MOVEI FLAG,5
RENPRL: DCBIN <UTIL>
CAIN UTIL,15
JRST RENPRL
CAIN UTIL,12
JRST RENPRL
IDPB UTIL,BPREG
SOJG FLAG,RENPRL
LDB UTIL,[350700,,IOREG]
CAIN UTIL,"?"
JRST DEATH
CAIE UTIL,"!"
RETURN
CALLR RENLIP
JRST RENPRP
ENDR
; DEATH -- FATAL DATACOMPUTER ERROR (? MESSAGE)
;
DEATH: CALLR RENLIP
TSOUT <[ASCIZ/ ?? Fatal Datacomputer error ??/],CRLF>
; (((ITS)))
IFN F.ITS,<
.BREAK 16,160000
>
; (((↑↑↑)))
; (((TOPS-10 OR SAIL)))
IFN F.SAIL!F.TP10,<
EXIT
>
; (((↑↑↑)))
; (((TENEX)))
IFN F.TENX,<
HALTF
JRST .-1
>
; (((↑↑↑)))
; ***SYSTEM DEPENDENT ROUTINES***
; (((ITS)))
IFN F.ITS,<
; SYSTEM INITIALIZATION
;
S$INIT: BEGINR
.OPEN TTO,[.UAO,,'TTY']
.LOSE 1000
; ITS ICP: 1) GET REMOTE SOCKET NUMBERS FROM ICP SOCKET
; 2) OPEN CONNECTION SOCKET
.CALL [ SETZ
SIXBIT/OPEN/
MOVSI .UII!40050 ; 32 BITS, GENSYM SOCKET
MOVEI ICP
[('NET')]
[-1]
MOVEI DCSOKT
SETZI DCHOST]
JRST ICPLUZ
.CALL [ SETZ
SIXBIT/NETBLK/ ; WAIT FOR STATE CHANGE
MOVEI ICP
MOVEI %NSRFS
SETZM REG1]
.LOSE 1000
MOVE REG1,[ICP,,RCHBLK]
.RCHST REG1,
HRRE REG1,RCHBLK+4
CAIN REG1,%NSCLI
JRST ICPWIN
CAIE REG1,%NSINP
CAIN REG1,%NSOPN
JRST ICPWIN
ICPLUZ: TSOUT <[ASCIZ/The Datacomputer is dead -- lose lose!/]>
.BREAK 16,160000
ICPWIN: MOVE REG1,RCHBLK+1
ADDI REG1,2
MOVEM REG1,LCLRCV
.IOT ICP,REG1
.CLOSE ICP,
ADDI REG1,1
.CALL [ SETZ
SIXBIT/OPEN/
MOVSI 40!.UAI
MOVEI DCI
[('NET')]
LCLRCV
REG1
SETZI DCHOST]
JRST ICPLUZ
.CALL [ SETZ
SIXBIT/NETBLK/
MOVEI DCI
MOVEI %NSRFS
SETZM REG1]
.LOSE 1000
JUMPE REG1,ICPLUZ
ENDR
; NETWORK QUIT -- BREAK DATACOMPUTER CONNECTIONS
;
QUIT: DCBIN <IOREG>
JUMPGE IOREG,QUIT
QUITQ: .BREAK 16,160000
>
; ((↑↑↑)))
; (((TOPS-10 OR SAIL)))
IFN F.TP10!F.SAIL,<
; SYSTEM INITIALIZATION
;
S$INIT: BEGINR
MOVE 0,[SIXBIT/DCSTAT/]
SETNAM 0,
CALLR ICP
ENDR
; (((TOPS-10)))
IFN F.TP10,<
; TOPS-10 ICP: 1) SET CONNECTION SOCKETS IN LISTENING STATE
; 2) GET REMOTE SOCKET NUMBERS FROM ICP SOCKET
; 3) OPEN CONNECTION SOCKETS
; A) EVEN - RECEIVE
; B) ODD - SEND
;
ICP: BEGINR <IOREG,UTIL,FLAG>
ICPBEG: SETZM ICPBLK+.IBDEV
SETZM DCIBLK+.IBDEV
SETZM DCOBLK+.IBDEV
SETZM DCIBLK+.IBRMT
SETZM DCOBLK+.IBRMT
MOVE IOREG,LINP ; LISTEN ON INPUT SOCKET
CALL IOREG,[SIXBIT/IMPUUO/]
JRST .+2
JRST ICPICP
MOVE IOREG,DCIBLK+.IBERR
CAIE IOREG,.IESKT
JRST ICPEIL
MOVE IOREG,PWRK
CALL IOREG,[SIXBIT/IMPUUO/]
JRST ICPERD
LDB REG4,[221100,,WRKBLK+.IBHST] ; NUMBER OF IMP DEVICES
GETPPN UTIL,
HRRZI UTIL,(UTIL)
LSH UTIL,11
ADDI UTIL,102
SETZ REG3,
SETZ FLAG,
ICPRDV: MOVE IOREG,[SIXBIT/IMP/] ; RESET DEVICE(S) USED
MOVEM IOREG,WRKBLK+.IBDEV
MOVEI REG1,(REG3)
IDIVI REG1,10
JUMPE REG1,ICPRD1
ADDI REG1,20
ADDI REG2,20
DPB REG1,[140600,,WRKBLK+.IBDEV]
DPB REG2,[060600,,WRKBLK+.IBDEV]
JRST ICPRD2
ICPRD1: ADDI REG2,20
DPB REG2,[140600,,WRKBLK+.IBDEV]
ICPRD2: SETZM WRKBLK+.IBLCL
MOVE IOREG,SWRK
CALL IOREG,[SIXBIT/IMPUUO/] ; TEST STATUS OF SOCKET
JRST ICPRD3
HRRZ IOREG,WRKBLK+.IBHST ; FOREIGN HOST
CAIE IOREG,DCHOST
JRST ICPRD3
PJOB REG1,
HLRZ REG2,WRKBLK+.IBSTT ; OWNING JOB
CAIE REG2,(REG1)
JRST ICPRD3
MOVE IOREG,WRKBLK+.IBLCL
CAMN IOREG,UTIL ; DATALANGUAGE SOCKET(S)
JRST ICPCLS
ICPRD3: ADDI REG3,1
CAIGE REG3,(REG4)
JRST ICPRDV
JUMPN FLAG,ICPBEG
TTCALL 3,[ASCIZ/ (Connections in use.)/]
EXIT
ICPCLS: MOVE IOREG,CWRK
CALL IOREG,[SIXBIT/IMPUUO/]
JRST ICPERD
MOVEI IOREG,1
MOVEM IOREG,WRKBLK+.IBLCL
MOVE IOREG,SWRK
CALL IOREG,[SIXBIT/IMPUUO/]
JRST ICPERD
MOVE IOREG,CWRK
CALL IOREG,[SIXBIT/IMPUUO/]
JRST ICPERD
TTCALL 3,[ASCIZ/ [Restarting]
/]
SETO FLAG,
JRST ICPRDV
ICPICP: MOVE IOREG,DCIBLK+.IBDEV ; GET DEVICE NAME
MOVEM IOREG,DCOBLK+.IBDEV ; AND COPY IT FOR DUPLEX
MOVEM IOREG,DCCHAS+1
MOVE IOREG,LOUT ; LISTEN ON OUTPUT SOCKET
CALL IOREG,[SIXBIT/IMPUUO/]
JRST ICPEOL
MOVE IOREG,OICP
CALL IOREG,[SIXBIT/IMPUUO/] ; OPEN CONNECTION
JRST ICPEC
MOVE IOREG,ICPBLK+.IBDEV ; GET DEVICE NAME
MOVEM IOREG,ICCHAS+1
OPEN DCCHAN,ICCHAS ; OPEN AS STANDARD DEVICE
JRST ICPEF
IN DCCHAN,
JRST .+2
JRST ICPET
MOVE IOREG,ICPBUF+1
MOVE IOREG,1(IOREG) ; GET THE SOCKET NUMBER
LSH IOREG,-4 ; RIGHT JUSTIFY 32 BITS
MOVEM IOREG,DCOBLK+.IBRMT
AOJ IOREG,
MOVEM IOREG,DCIBLK+.IBRMT
RELEAS DCCHAN, ; CLOSE AS STANDARD DEVICE
MOVE IOREG,CICP
CALL IOREG,[SIXBIT/IMPUUO/] ; CLOSE CONNECTION
JRST ICPEC
MOVE IOREG,OINP ; OPEN INPUT SOCKET
CALL IOREG,[SIXBIT/IMPUUO/]
JRST NETEIC
MOVE IOREG,OOUT ; OPEN OUTPUT SOCKET
CALL IOREG,[SIXBIT/IMPUUO/]
JRST NETEOC
OPEN DCCHAN,DCCHAS
JRST NETECF
OUT DCCHAN,
JRST .+2
JRST NETEOT
MOVE IOREG,PWRK
CALL IOREG,[SIXBIT/IMPUUO/]
JRST QUIT
HRRZ IOREG,WRKBLK+.IBHST
ENDR
>
; (((↑↑↑)))
; ((((SAIL)))
IFN F.SAIL,<
; SAIL ICP: THIS ROUTINE WAS SWIPED OFF OF ANOTHER
; SAIL PROGRAM THAT WORKED; BUT I AM
; NOT SURE HOW IT WORKS OR WHATEVER!
; IT SURE IS A LOT MORE COMPLICATED TO
; ICP ON A TOPS-10 THAN ITS OR TENEX!
; POSITIONS IN MTAPE BLOCK
STLOC==1 ; STATUS BITS RETURNED HERE
LSLOC==2 ; LOCAL SOCKET
WFLOC==3 ; WAIT FLAG
BSLOC==4 ; BYTE SIZE LOCATION
FSLOC==5 ; FOREIGN SOCKET
HLOC==6 ; HOST NUMBER
ERRBTS==763600 ; I/O ERROR BITS
ICP: BEGINR
PJOB REG2, ; GET JOB #
TIMER REG1, ; GET A "RANDOM NUMBER"
ANDI REG1,377770 ; BUT MAKE IT A HALFWORD
MOVSS REG4,REG2 ; RECEIVE SOCKET
ADDI REG2,(REG1) ; BARFUCIOUS SAIL CROCK...
ADDI REG4,(REG1) ; TO INSURE WE WIN OKAY...
ADDI REG4,1 ; TRANSMIT SOCKET
INIT DCCHAN,17
SIXBIT /IMP/
0
JRST ICPLUZ
SETZM CONACB
MOVEM REG2,CONECB+LSLOC
MOVEI REG3,DCHOST
MOVEM REG3,COJECB+HLOC
SETOM COJECB+WFLOC
MOVEI REG3,40
MOVEM REG3,CONECB+BSLOC
MOVEI REG3,DCSOKT
MOVEM REG3,CONECB+FSLOC
MTAPE DCCHAN,[
↑D15
BYTE (6) 2,24,0,12,12
] ; TIME OUT CLS, RFNM, RFC, AND INPUT
MTAPE DCCHAN,CONACB
STATZ DCCHAN,ERRBTS
JRST ICPLUZ ; NO CONNECTION TO LOGGER
INPUT DCCHAN,[IOWD 1,FRS#
0]
STATZ DCCHAN,ERRBTS
JRST ICPLUZ ; GOT LOGGER BUT DIDN'T GET SOCKET FROM HIM
MOVE REG3,FRS
LSH REG3,-4
MOVEM REG3,FRS
ADDI REG3,1
MOVEM REG3,FSS#
ADDI REG2,2
MOVEM REG2,LRS#
ADDI REG4,2
MOVEM REG4,LSS#
MOVE REG1,CONECB+LSLOC
MOVEM REG1,TERBLK+LSLOC
MTAPE DCCHAN,TERBLK ; RELEASE LOGGER
INIT DCCHAN,1
SIXBIT /IMP/
XWD DCOBUF,DCIBUF
JRST ICPLUZ
MTAPE DCCHAN,[
↑D15
BYTE (6) 5,24,0,12,0
] ; TIME OUT CLS, RFNM, AND RFC
MOVEI REG1,↑D8
DPB REG1,[POINT 6,DCIBUF+1,11]
DPB REG1,[POINT 6,DCOBUF+1,11]
MOVEM REG2,CONECB+LSLOC
MOVEI REG3,DCHOST
MOVEM REG3,CONECB+HLOC
SETZM CONECB+WFLOC
MOVEI REG3,↑D8
MOVEM REG3,CONECB+BSLOC
MOVE REG3,FSS
MOVEM REG3,CONECB+FSLOC
MTAPE DCCHAN,CONECB
MOVE REG1,CONECB+STLOC
TRNN REG1,-1
STATZ DCCHAN,ERRBTS
JRST ICPLUZ ; CAN'T CONNECT TO RECEIVE SIDE
CALLR CLSCHK ; SEE IF WE ARE REALLY OPEN
JRST ICPLUZ
AOS CONECB+LSLOC
SOS CONECB+FSLOC
MOVEI REG3,↑D8
MOVEM REG3,CONECB+BSLOC
MTAPE DCCHAN,CONECB
MOVE REG1,CONECB+STLOC
TRNN REG1,-1
STATZ DCCHAN,ERRBTS
JRST ICPLUZ ; CAN'T CONNECT TO SEND SIDE
CALLR CLSCHK
JRST ICPLUZ
MOVEI REG3,4
MOVEM REG3,CONECB
MTAPE DCCHAN,CONECB
MOVE REG1,CONECB+STLOC
TLC REG1,300000
TLCN REG1,300000
TLNE REG1,060000
JRST ICPLUZ
STATZ DCCHAN,ERRBTS
JRST ICPLUZ
SOS CONECB+LSLOC
CALLR CLSCHK
JRST ICPLUZ
MTAPE DCCHAN,CONECB
MOVE REG1,CONECB+STLOC
TLC REG1,300000
TLCN REG1,300000
TLNE REG1,060000
JRST ICPLUZ
STATZ DCCHAN,ERRBTS
JRST ICPLUZ ; LOST WHILE WAITING FOR RECEIVE SIDE TO CONNECT
CALLR CLSCHK
JRST ICPLUZ
RETURN
; HERE WHEN CONNECTION FAILS
ICPLUZ: OUTSTR [ASCIZ/? Cannot establish network connection/]
EXIT
ENDR
>
; (((↑↑↑)))
; NETWORK QUIT -- BREAK DATACOMPUTER CONNECTIONS
;
QUIT: INPUT DCCHAN,
STATZ DCCHAN,20000
JRST QUIT01
SKIPN FLAGDD
JRST QUIT
HRRZ REG1,DCIBUF
CALLR NUTDD
JRST QUIT
QUIT01: RELEAS DCCHAN, ; RELEASE INPUT/OUTPUT DEVICE
QUIT02: IFN F.TP10,<
MOVE IOREG,COUT ; CLOSE OUTPUT SOCKET
CALL IOREG,[SIXBIT/IMPUUO/]
JRST NETEOC
>
QUIT03: IFN F.TP10,<
MOVE IOREG,CINP ; CLOSE INPUT SOCKET
CALL IOREG,[SIXBIT/IMPUUO/]
JRST NETEIC
>
QUITQ: RESET
EXIT
; NETWORK UTILITY -- MESSAGE INPUT
;
NUTMI: BEGINR
IN DCCHAN,
JRST .+2
JRST NETEIT
SKIPE FLAGDD
CALLR NUTDD
ENDR
; NETWORK UTILITY -- DISPLAY DATALANGUAGE
; IN: REG1 -- POINTER TO BUFFER HEADER
;
NUTDD: BEGINR <IOREG,UTIL>
MOVE REG1,DCIBUF+1
MOVE UTIL,DCIBUF+2
NUTDDL: SOJL UTIL,RETN(0)
ILDB IOREG,REG1
JUMPE IOREG,NUTDDL
TTCALL 1,IOREG
JRST NUTDDL
ENDR
; FATAL NETWORK ERROR MESSAGES
;
; (((TOPS-10)))
IFN F.TP10,<
ICPERD: TTCALL 3,[ASCIZ/ ?? Restart failure ??/]
EXIT
ICPEIL: TTCALL 3,[ASCIZ/ ?? Input socket listen failure ??/]
EXIT
ICPEOL: TTCALL 3,[ASCIZ/ ?? Output socket listen failure ??/]
JRST QUIT03
ICPET: TTCALL 3,[ASCIZ/ ?? ICP failure (transfer) ??/]
RELEAS DCCHAN, ; CLOSE AS STANDARD DEVICE
ICPEZ: MOVE IOREG,CICP
CALL IOREG,[SIXBIT/IMPUUO/] ; CLOSE CONNECTION
JRST ICPEC
JRST QUIT02
ICPEF: TTCALL 3,[ASCIZ/ ?? ICP failure (file control) ??/]
JRST ICPEZ
ICPEC: TTCALL 3,[ASCIZ/ The Datacomputer is unavailable/]
MOVE 0,ICPBLK+.IBERR
CAIN 0,.IESOF ; SOCKET OPEN FAILURE
TTCALL 3,[ASCIZ/ (rejecting)/]
CAIN 0,.IEDWN
TTCALL 3,[ASCIZ/ (down)/]
CAIN 0,.IETIM
TTCALL 3,[ASCIZ/ (timeout)/]
TTCALL 3,[ASCIZ/.
/]
MOVE IOREG,CICP
CALL IOREG,[SIXBIT/IMPUUO/]
JRST QUIT02
JRST QUIT02
NETEIC: TTCALL 3,[ASCIZ/ ?? Input failure (connection) ??/]
EXIT
NETEOC: TTCALL 3,[ASCIZ/ ?? Output failure (connection) ??/]
JRST QUIT03
NETECF: TTCALL 3,[ASCIZ/ ?? File control failure ??/]
JRST QUIT02
>
; (((↑↑↑)))
NETEIT: TTCALL 3,[ASCIZ/ ?? Input failure (transfer) ??/]
JRST QUIT
NETEOT: TTCALL 3,[ASCIZ/ ?? Output failure (transfer) ??/]
JRST QUIT
; (((TOPS-10)))
IFN F.TP10,<
OICP: .IUCON,,ICPBLK
CICP: .IUCLS,,ICPBLK
LINP: .IULSN,,DCIBLK
OINP: .IUCON,,DCIBLK
CINP: .IUCLS,,DCIBLK
LOUT: .IULSN,,DCOBLK
OOUT: .IUCON,,DCOBLK
COUT: .IUCLS,,DCOBLK
PWRK: .IULHS,,WRKBLK
SWRK: .IUSTT,,WRKBLK
CWRK: .IUCLS,,WRKBLK
>
; (((↑↑↑)))
; (((SAIL)))
IFN F.SAIL,<
CLSCHK: BEGINR
MTAPE DCCHAN,STTBLK
MOVE REG1,STTBLK+1
IOR REG1,STTBLK+2
STATO DCCHAN,ERRBTS
TLNN REG1,060000
RETURN SKIP,1
ENDR
>
; (((↑↑↑)))
>
; (((↑↑↑)))
; (((TENEX)))
IFN F.TENX,<
; SYSTEM INITIALIZATION
;
S$INIT: BEGINR
MOVE REG1,[SIXBIT/DCSTAT/]
SETNM
MOVEI REG1,400000 ; FOR THIS FORK
MOVE REG2,[LEVTAB,,CHNTAB]
SIR ; SET UP INTERRUPT TABLES
EIR ; ENABLE INTERRUPTS
MOVEI REG1,400000 ; FOR THIS FORK
MOVE REG2,[1B10+1B15] ; TTY, EOF, ILI
AIC ; ACTIVATE CHANNELS
SETZM FLAGEF
CALLR ICP
ENDR
; TENEX ICP: 1) GET REMOTE SOCKET NUMBERS FROM ICP SOCKET
; 2) OPEN CONNECTION SOCKETS
; A) EVEN - INPUT
; B) ODD - OUTPUT
; JFN STRING: "NET:<JOB-RELATIVE-SKT>.<FOREIGN-HSTxZy
∨I∪∂≤5'↔(|λ~∀v~)∪π t%¬∂∪9$~∀∪5∨-
∪I∞bYlhh`n@`XY¬U
%t~∀∪⊃I%∨∩∪I∞dYmβ'π∪h←≥(hd`\←t~∀∪'∃)4∪%∃∞fX~(∪'∨+P∩∩∩v↓→∨πβ0A'∨π-(@d@W∃∨¬I_~∀%≠∨-$∪%∞HY π⊃='(~∀%≠∨-$∪%∞LXb`~(∪π-⊃M(~∀∩↓≥∨+($∩∩vA→β∪→+I
@ZZ↓≠β↔
↓⊃∨'(FA∪≥Q≡A')I∪≥∞~(∩A∃%M(∩\VD∩∩vA
-⊃'(↓'+ππ∃'&A∨HA≥∨+PA
β∪1+%
~(∪≠∨-8∪%∞HY π'=π⊗~∀%≥∨+(4∀∩A∃I'(∩\,b~∀∪!%→5∩%%∞b0b∩vAM⊃∨%(↓∂)∃
8~∀β⊃I%∨∩∪I∞dY +
H~∀∪∂Q∃
≤∩$∩vA∪
Aπ∨9≥π)%∨≤~∀$A∃%'P∪∪π!∃∞~∀∪5∨-
∪I∞dYlha∧j,c∧bst@v@fH[¬∪(0A%β⊂~∀∪∨A≥∩$∩vA∨A≤A∪
Aπ∨9≥π)%∨≤~∀$A∃%'P∪∪π!∃≡~∀∪ ∪≤
∀%≠∨-4∪%∞HY∪π!M∨ε~∀%π→∨'_~∀∩A)%'(∪%π!ε4∀∪≠∨Y
∪%≤bY6hP`n``0Y¬+
→%:~(∪⊃%%=∩∪%≤dY7βMπ∪4←9(tdH\←:~(∪')h∪%∞LX~∀∪M∨+(~(∪≠∨-∃∩∪%≤dY π!∨'(~(∪≠∨-∃∩∪%≤fPb`4∀∪π-!'(~∀$A≥∨+P~∀∩A)%'(∩8Vb~∀%≠∨-≤%%∞d1∪π!'=ε~∀∪9∨+(~(∩A∃%M(∩\VD~∀∪⊃I→5∩∪I∞bXD~∀∪⊃I%∨∩∪I∞dY +
H~∀∪∂Q∃
≤∩$∩vA∨U)!+(↓∃
≤~(∩A∃%M(∪∪πA∪∞~(∪≠∨-∃~∪%≤bY π=∃
≤~(∪⊃%→i∩∪%≤bXb~(∪⊃%%=∩∪%≤dY¬+→
$~(∪∂)∃→≤∩∩∩lA∪≥!U(A∃
8~∀∩A)%'(∪%π!∨≤~∀∪≠=-~∪I∞bY⊃π∪∃
8~∀∪≠=-
∪%∃∞dY6Da∧jVY∧rVcλbs:@l@p[¬%(XA≥<[/β∪PXA%¬λ~∀∪=!≥4∀∩A∃I'(∪∪
!∪≡4∀∪≠∨Y
∪%≤bY π=∃
≤~(∪≠∨-∀∪%∞HY6baλjVo∧dVc∧dA:@v@`[¬∪(0A≥≡[]β∪([ +
IλXA]%∪)
4∀∪∨!∃≥~∀$A∃%'P∪∪π!∃∨≡~∀%≥ $4∀~∀v↓≥)/=%⊗A#U∪(~∀l~∃#+%(t∪'∃)∨~∪→→β∂_~∃#+%(`bt% π¬∪8∩y∪∨I∞|~(∪'↔∪A
∪
→¬∂~(∩A∃%M(∪#+%(`b~)#+∪)Dt∪%M(~∀%⊃β→)_~∀∪∃I'(∩\4b∩∩v↓∪≤Aπ¬'
A∨_@Eπ∨9)∪≥+∀D~∀~(vA
βQβ_A≥∃)/∨%,A%%=$A≠M'β∂L~∀v~)≥)Dt∪!'=+(~∀%%'P~∀∪⊃¬→)~(∪∃%'P∩\Zb4∃∪π!∃∞t∪⊃I%∨∩∪I∞bYmβ'π∪h↑A)Q∀AICi¬G←[aUiKdA%fAk]¬mCSY¬EYJ@!]Kio=eVR\=:~∀∪)%'(∪9)"4∃∪π!∃≡t∪⊃I%∨∩∪I∞bYmβ'π∪h↑A)Q∀AICi¬G←[aUiKdA%fAk]¬mCSY¬EYJ@!I←o\$\←:~(∪∃%'P∪≥)∃"~∃∪
!εt%⊃%%∨$∪%∞DY7β'
∪4↑@|}A∪π@Aπ→∨MAMC%YkeJ}}←:4∀∪∃%M(∪≥Q"~∃%π!∨≤t∪⊃%I∨∩∪%∃∞bY7¬'π∪4<@}}A%π A←Uiakh↓∂)∃
8AMCS1keJ@|}←:~(∪∃%'P∪≥)∃"~∃∪
!∪∞h∪⊃%%=∩∪%≤bY7βMπ∪4↑}}A∪
AS]AkhA∂Q∃
≤A→CSYkIJ@}}=:~∀∪)%'(∪9)"4∃∪π!∃∪≡t∪!%%∨∩%%∞b17β'π%4↑@}|A∪π ↓←kiaUhA∨!∃≥AM¬SYke∀@}}←t~∀∪∃I'(∪≥∃)"~)∪π!=≡t∪⊃I%∨∩∪I∞bYmβ'π∪h↑@}}↓∪π A%]akh↓∨!≥_AMCS1keJ@|}←:~(∪∃%'P∪≥)∃"~∀~(vA!'∃+ ≡[%≥)%I+!(AI∨+)∪9&~∀l~∃∨→!'∩t%'↔∪!8∪
→β≥~∀$A∃%'P∪∨
A'
~∀%')54∪
→β≥~∀% ¬%,∩∩∩v↓%)+I≤A
%=~A∪≥Q%%+A(~∃=
!'
h∪⊃%%=∩∪%≤bY7βMπ∪4↑}}A+9KqaK
iKHA∃∨ACP@←:~(∪!'∨U(~∀∪5∨-∩%%∞b0b`b~(∪⊃%%h∪%∞HY!'∪Aεb~∀%'+¬∩%%∞d0b~∀∪5∨-∩%%∞f0b`~∀%')4%%∞h0~∀∪≥=+(~∀$A∃%'P∩\Vb4∀∪⊃%I∨∩∪%∃∞bY7¬'π∪4<@}}~(←:~∀%!'∨+P~∀∪⊃¬→)~(∪∃%'P∩\Zb4∃∪→∪A'∩t∪!%%4∪I∞bYA'∪!εD~∀∪≠=-
∪%∃∞dXZDQ%∞DR~∀∪!%%∨∩%%∞b17β'π%4↑@}|A∪YY∃OCXA%]gieUGiS←8ACh@=:~∀∪
β≠≤∪I∞dYlZc:~(∩A⊃%I∨∩∪%∃∞bY7¬'π∪4<@}}A%[a←gMSEYJ↓KmK]PACh@=:~∀∪A'∨+(4∀∪≠∨Y∩∪%∃∞bXb@b~∀∪!%%4∪I∞dYA'∪!εD~∀∪'U¬∩∪%∃∞dXb4∀∪≠∨Y∩∪%∃∞fXb@~∀∪'∃)4∪%∃∞hX~(∪≥∨+P~∀∩A)%'(∩8Vb~∀%⊃%%∨$∪%∞DY7β'
∪4↑@|}~∀←t~∀∪!M∨+(~(∪⊃β→Q~∀∪)%'(∩8Zb~∀x~∀v@ PQ==xRRR~(_v@T(U β)∧TTT~(~∀∪→%(∩∩∩lA→∪)∃%β→&↓∂≡A⊃∃%
~∀4∃π%→_t∪¬3Q
∩Pn$bjXbHX`X`0`~∀~(v@PP!∪)&R$R~∃∪→≤A]%)&Xx4∃%π⊃ →⊗t∪ →∨π⊗b`~∃1π→%πXt∪¬→=π⊗@b4∀|~∀l@PPQy=<RR$~∀~∀l@PPQQ∨!&ZD`RRR4∃∪
≤↓]) D`Xx~(~∃∪πA¬→⊗t%'∪1¬%(∩←∪5 ↑~∀$`~∀∩D``∩∩$vA→∨
β_A'=π↔(4∀∩h`0Y π⊃='(∩∩l@fdA ∪(A¬e)&@!∪π R0Aππα↓⊃∨'(4∀∪ πM∨↔(∩$∩vA ¬)βπ∨5!+)HA'∨π-(~∃⊃π∪¬→,t∪'∪a¬∪(∩=∪≠ ↑4∀∩`~(∩b`d$∩∩vA1∨πβ_↓'∨π↔∃(~∀∩D`XY
⊃∨'($∩v@p↓¬∪(A 3)&0A⊃∨'P~∀∩`$∩∩vA
παA'=π↔(↓
%∨~↓∪π @,@b~∃⊃π∨¬→,t∪'∪a¬∪(∩=∪≠ ↑4∀∩`~(∩b`f$∩∩vA1∨πβ_↓'∨π↔∃(~∀∩D`XY
⊃∨'($∩v@p↓¬∪(A 3)&0A⊃∨'P~∀∩`$∩∩vA
παA'=π↔(↓
%∨~↓∪π ~)/%↔¬1⊗t∪¬1∨π⊗∩T~∃∪π
⊃β&t$b`∩∩$vA∪≠¬∂
A≠=
~∀%'∪1¬%(∩←∪5 ↑~∀$`XY∪
!¬+4∃∪π! +t∪ →∨π⊗$f~∃
π⊃β&h∩`∩∩$v@nA ∪(AβMπ∪∩A5∨
~(∪'∪1 ∪(∩←%≠ ↑~(∪ π∨ +XY⊃π∪¬+_~∀|~(v@PP!==<R$R~∀vPPQ'¬∪_RR$~∃∪
8A]'¬∪_Xx4∃π∨≥∃π∧t∪ →∨π⊗n~∃'Q)¬→⊗h∩d~∀%¬→∨π,@d~∃Q%¬→,t∩f~(∩`~∀$b~∀∩@~∀|~(v@PP!==<R$R~∀vPPQ)=!&Zb@A∨$AMβ∪_R$R~∃∪→≤A]Q b`C_]'β∪0Xx~∃⊃π∪¬+_t∪¬→=π⊗∩f4∃ π∨ +t∪ →∨π⊗$f~∀|4∀v@P Q==<$RR~∀4∀v@P Q)≥∃0RRR4∃∪
≤↓])90Xx~)→-)¬∧t∪!M∪!εb4∀∪!'%!εd~(∪!'∪Aεf~∃A'∪!εDt∪¬→=π⊗∩b4∃!'∪Aεdt∪ →∨π⊗$b~∃!M∪!εfh∪¬→∨
⊗∩b~)π⊃≥)¬∧t∪%∃!β(↓=λb`0y1 `|~∀$bXYFPSI
REPEAT 4,<EXP 0>
1,,ILIPSI
REPEAT ↑D20,<EXP 0>
FLAGEF: 0
DCSOCK: DCSOKT
ICPSOC: 0 ; ICP SOCKET
DCIJFN: 0 ; DC INPUT JFN
DCOJFN: 0 ; DC OUTPUT JFN
>
; (((↑↑↑)))
; * VARIABLES
FLAGDD: 0
BUFFER: BLOCK 100
STSIZ==100
STBEG: BLOCK STSIZ
END DCSTAT
β